#include <QApplication>
#include <QWidget>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QFrame>

/*
 * +---------------------------------------------------+
| +-------------+  +-----------------------------+ |
| |   [Logo]    |  |     用户名：[___________]   | |
| |             |  |     密码  ：[___________]   | |
| |             |  |     [ 登录按钮 ]            | |
| +-------------+  +-----------------------------+ |
+---------------------------------------------------+


场景：创建一个登录界面，使用 QFrame 区分左侧 Logo 区和右侧登录表单区
💡 核心目的：
使用 QFrame 作为边框容器，让界面看起来结构清晰、美观；
通过 QFrame::Box 和样式增强视觉层次；
模拟一个典型的软件登录窗口界面。
 * */
#include <QApplication>   // 引入 Qt 应用程序类
#include <QWidget>        // 引入基础窗口控件类
#include <QHBoxLayout>    // 引入水平布局管理器
#include <QVBoxLayout>    // 引入垂直布局管理器
#include <QLabel>         // 引入标签控件类
#include <QLineEdit>      // 引入文本编辑控件类（单行）
#include <QPushButton>    // 引入按钮控件类
#include <QFrame>         // 引入框架控件类，用于边框和分隔

int main(int argc, char *argv[])
{
    QApplication app(argc, argv); // 创建 Qt 应用程序对象，管理应用的生命周期

    QWidget window;               // 创建一个顶层窗口控件
    window.setWindowTitle("登录窗口");  // 设置窗口标题

    // 创建一个水平布局管理器，并绑定到窗口，窗口内所有控件水平排列
    QHBoxLayout *mainLayout = new QHBoxLayout(&window);

    // 创建左侧的 QFrame，作为 Logo 区的容器
    QFrame *leftFrame = new QFrame();
    leftFrame->setFrameShape(QFrame::Box);        // 设置边框形状为盒子（四边边框）
    leftFrame->setLineWidth(2);                    // 设置边框线宽为 2 像素
    leftFrame->setStyleSheet("QFrame { background-color: #e0f7fa; }"); // 设置背景颜色为淡蓝色

    // 创建左侧垂直布局管理器，绑定到 leftFrame 中，用于垂直排列子控件
    QVBoxLayout *leftLayout = new QVBoxLayout(leftFrame);
    QLabel *logoLabel = new QLabel("🌟 LOGO 🌟"); // 创建显示 Logo 文本的标签
    logoLabel->setAlignment(Qt::AlignCenter);     // 设置标签文本居中对齐
    leftLayout->addWidget(logoLabel);             // 将标签添加到左侧布局中

    // 创建右侧的 QFrame，作为登录表单的容器
    QFrame *rightFrame = new QFrame();
    rightFrame->setFrameShape(QFrame::StyledPanel); // 设置边框为样式面板，带阴影效果
    // 设置右侧面板的样式：白底、灰色边框、圆角
    rightFrame->setStyleSheet("QFrame { background-color: #ffffff; border: 1px solid gray; border-radius: 5px; }");
    rightFrame->setMinimumWidth(250);             // 设置右侧面板最小宽度为 250 像素

    // 创建右侧垂直布局，绑定到 rightFrame，垂直排列登录表单控件
    QVBoxLayout *formLayout = new QVBoxLayout(rightFrame);
    QLabel *userLabel = new QLabel("用户名:");     // 用户名标签
    QLineEdit *userEdit = new QLineEdit();         // 用户名输入框
    QLabel *passLabel = new QLabel("密码:");       // 密码标签
    QLineEdit *passEdit = new QLineEdit();         // 密码输入框
    passEdit->setEchoMode(QLineEdit::Password);    // 设置密码框为隐藏输入（密码模式）
    QPushButton *loginButton = new QPushButton("登录"); // 登录按钮

    // 依次将控件加入右侧表单布局
    formLayout->addWidget(userLabel);
    formLayout->addWidget(userEdit);
    formLayout->addWidget(passLabel);
    formLayout->addWidget(passEdit);
    formLayout->addWidget(loginButton);

    // 把左右两个 QFrame 控件加入到窗口的水平主布局中
    mainLayout->addWidget(leftFrame);
    mainLayout->addWidget(rightFrame);

    window.resize(500, 200);    // 设置窗口初始大小：宽500，高200
    window.show();              // 显示窗口
    return app.exec();          // 进入 Qt 事件循环，等待用户交互
}

